package co.inventario.datos.sqlserver;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import co.inventario.entidad.ClienteDTO;
import co.inventario.entidad.EmpleadoDTO;
import co.inventario.entidad.PedidoVentaDTO;

public class PedidoVentaDAOSQLServer {

	private String crearSQL;
	private String actualizarSQL;
	private String consultarSQL;

	public PedidoVentaDAOSQLServer() {
		crearSQL = "";
		actualizarSQL = "";
		consultarSQL = "";
	}

	public void crear(PedidoVentaDTO pedidoVentaDTO, Connection connection) throws SQLException {
		crearSQL = "INSERT INTO PedidoVenta (In_Consecutivo_PedidoVenta, In_Codigo_Cliente, In_Codigo_Empleado, Da_Fecha_PedidoVenta, Nv_Estado_PedidoVenta) VALUES (?, ?, ?, ?, ?)";
		try (PreparedStatement preparedStatement = connection.prepareStatement(crearSQL)) {
			preparedStatement.setInt(1, pedidoVentaDTO.getInConsecutivoPedidoVenta());
			preparedStatement.setInt(2, pedidoVentaDTO.getClienteDTO().getInCodigoCliente());
			preparedStatement.setInt(3, pedidoVentaDTO.getEmpleadoDTO().getInCodigoEmpleado());
			preparedStatement.setString(4, pedidoVentaDTO.getDaFechaPedidoVenta());
			preparedStatement.setString(5, pedidoVentaDTO.getNvEstadoPedidoVenta());
			preparedStatement.executeUpdate();
		} catch (SQLException exception) {
			System.err.println("Se ha presentado un problema creando el Pedido Venta: " + exception.getMessage());
		}
	}

	public void actualizar(PedidoVentaDTO pedidoVentaDTO, Connection connection) throws SQLException {
		actualizarSQL = "UPDATE PedidoVenta SET In_Codigo_Cliente = ISNULL(?, In_Codigo_Cliente), In_Codigo_Empleado = ISNULL(?, In_Codigo_Empleado), Da_Fecha_PedidoVenta = ISNULL(?, Da_Fecha_PedidoVenta), Nv_Estado_PedidoVenta = ISNULL(?, Nv_Estado_PedidoVenta) WHERE In_Codigo_PedidoVenta = ?";
		try (PreparedStatement preparedStatement = connection.prepareStatement(actualizarSQL)) {
			preparedStatement.setInt(1, pedidoVentaDTO.getClienteDTO().getInCodigoCliente());
			preparedStatement.setInt(2, pedidoVentaDTO.getEmpleadoDTO().getInCodigoEmpleado());
			preparedStatement.setString(3, pedidoVentaDTO.getDaFechaPedidoVenta());
			preparedStatement.setString(4, pedidoVentaDTO.getNvEstadoPedidoVenta());
			preparedStatement.setInt(5, pedidoVentaDTO.getInCodigoPedidoVenta());
			preparedStatement.executeUpdate();
		} catch (SQLException exception) {
			System.err.println("Se ha presentado un problema actualizando el Pedido Venta: " + exception.getMessage());
		}
	}

	public PedidoVentaDTO consultarPorCodigo(PedidoVentaDTO pedidoVentaDTO, Connection connection) throws SQLException {
		consultarSQL = "SELECT * FROM PedidoVenta WHERE In_Codigo_PedidoVenta = ?";
		PedidoVentaDTO pedidoVentaDTOResultado = null;
		ClienteDTO clienteDTO = null;
		EmpleadoDTO empleadoDTO = null;
		try (PreparedStatement preparedStatement = connection.prepareStatement(consultarSQL)) {
			preparedStatement.setInt(1, pedidoVentaDTO.getInCodigoPedidoVenta());
			try (ResultSet resultSet = preparedStatement.executeQuery()) {
				if (resultSet.next() == true) {
					pedidoVentaDTOResultado = new PedidoVentaDTO();
					pedidoVentaDTOResultado.setInCodigoPedidoVenta(resultSet.getInt("In_Codigo_PedidoVenta"));
					pedidoVentaDTOResultado.setInConsecutivoPedidoVenta(resultSet.getInt("In_Consecutivo_PedidoVenta"));
					clienteDTO = new ClienteDTO();
					clienteDTO.setInCodigoCliente(resultSet.getInt("In_Codigo_Cliente"));
					pedidoVentaDTOResultado.setClienteDTO(clienteDTO);
					empleadoDTO = new EmpleadoDTO();
					empleadoDTO.setInCodigoEmpleado(resultSet.getInt("In_Codigo_Empleado"));
					pedidoVentaDTOResultado.setEmpleadoDTO(empleadoDTO);
					pedidoVentaDTOResultado.setDaFechaPedidoVenta(resultSet.getString("Da_Fecha_PedidoVenta"));
					pedidoVentaDTOResultado.setNvEstadoPedidoVenta(resultSet.getString("Nv_Estado_PedidoVenta"));
				}
			}
		} catch (SQLException exception) {
			System.err.println("Se ha presentado un problema consultando el pedido a traves del codigo: " + exception.getMessage());
		}
		return pedidoVentaDTOResultado;
	}

	public PedidoVentaDTO consultarPorConsecutivo(PedidoVentaDTO pedidoVentaDTO, Connection connection) throws SQLException {
		consultarSQL = "SELECT * FROM PedidoVenta WHERE In_Consecutivo_PedidoVenta = ?";
		PedidoVentaDTO pedidoVentaDTOResultado = null;
		ClienteDTO clienteDTO = null;
		EmpleadoDTO empleadoDTO = null;
		try (PreparedStatement preparedStatement = connection.prepareStatement(consultarSQL)) {
			preparedStatement.setInt(1, pedidoVentaDTO.getInConsecutivoPedidoVenta());
			try (ResultSet resultSet = preparedStatement.executeQuery()) {
				while (resultSet.next() == true) {
					pedidoVentaDTOResultado = new PedidoVentaDTO();
					pedidoVentaDTOResultado.setInCodigoPedidoVenta(resultSet.getInt("In_Codigo_PedidoVenta"));
					pedidoVentaDTOResultado.setInConsecutivoPedidoVenta(resultSet.getInt("In_Consecutivo_PedidoVenta"));
					clienteDTO = new ClienteDTO();
					clienteDTO.setInCodigoCliente(resultSet.getInt("In_Codigo_Cliente"));
					pedidoVentaDTOResultado.setClienteDTO(clienteDTO);
					empleadoDTO = new EmpleadoDTO();
					empleadoDTO.setInCodigoEmpleado(resultSet.getInt("In_Codigo_Empleado"));
					pedidoVentaDTOResultado.setEmpleadoDTO(empleadoDTO);
					pedidoVentaDTOResultado.setDaFechaPedidoVenta(resultSet.getString("Da_Fecha_PedidoVenta"));
					pedidoVentaDTOResultado.setNvEstadoPedidoVenta(resultSet.getString("Nv_Estado_PedidoVenta"));
				}
			}
		} catch (SQLException exception) {
			System.err.println("Se ha presentado un problema el pedido a traves del consecutivo: " + exception.getMessage());
		}
		return pedidoVentaDTOResultado;
	}

	public ArrayList<PedidoVentaDTO> consultarTodo(Connection connection) throws SQLException {
		consultarSQL = "SELECT * FROM PedidoVenta";
		PedidoVentaDTO pedidoVentaDTOResultado = null;
		ClienteDTO clienteDTO = null;
		EmpleadoDTO empleadoDTO = null;
		ArrayList<PedidoVentaDTO> pedidoVentaDTOLista = new ArrayList<PedidoVentaDTO>();
		try (PreparedStatement preparedStatement = connection.prepareStatement(consultarSQL)) {
			try (ResultSet resultSet = preparedStatement.executeQuery()) {
				while (resultSet.next() == true) {
					pedidoVentaDTOResultado = new PedidoVentaDTO();
					pedidoVentaDTOResultado.setInCodigoPedidoVenta(resultSet.getInt("In_Codigo_PedidoVenta"));
					pedidoVentaDTOResultado.setInConsecutivoPedidoVenta(resultSet.getInt("In_Consecutivo_PedidoVenta"));
					clienteDTO = new ClienteDTO();
					clienteDTO.setInCodigoCliente(resultSet.getInt("In_Codigo_Cliente"));
					pedidoVentaDTOResultado.setClienteDTO(clienteDTO);
					empleadoDTO = new EmpleadoDTO();
					empleadoDTO.setInCodigoEmpleado(resultSet.getInt("In_Codigo_Empleado"));
					pedidoVentaDTOResultado.setEmpleadoDTO(empleadoDTO);
					pedidoVentaDTOResultado.setDaFechaPedidoVenta(resultSet.getString("Da_Fecha_PedidoVenta"));
					pedidoVentaDTOResultado.setNvEstadoPedidoVenta(resultSet.getString("Nv_Estado_PedidoVenta"));
					pedidoVentaDTOLista.add(pedidoVentaDTOResultado);
				}
			}
		}
		return pedidoVentaDTOLista;
	}
}
